Terraformで “Requested resource not found” の state lock 関連のエラーに遭遇したら

Terraformで “Requested resource not found” の state lock 関連のエラーに遭遇したら

Clock Icon2021.10.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ちゃだいん(@chazuke4649)です。

Terraformにて、パッと解決方法がわからなかったエラーの対処法です。

エラー内容

% terraform plan
╷
│ Error: Error acquiring the state lock
│
│ Error message: 2 errors occurred:
│ 	* ResourceNotFoundException: Requested resource not found
│ 	* ResourceNotFoundException: Requested resource not found
│
│
│
│ Terraform acquires a state lock to protect the state from being written
│ by multiple users at the same time. Please resolve the issue above and try
│ again. For most commands, you can disable locking with the "-lock=false"
│ flag, but this is not recommended.
╵

直接原因

結論から言うと、「Requested resource(排他制御のDynamoDB)が見つかりません」ということのようです。

根本原因

今回の環境ではバックエンドS3を使用し、排他制御でDynamoDBを使用していました。が、検証環境でいろいろやっている中で、このエラー表示時点では、何かの拍子で排他制御用のDynamoDBテーブルを削除していました。今回自分の場合はこれが根本原因です。

ただし、これ以外のパターンで同様のエラーが出る場合もあるようなので、他関連情報は最後のリンクを見てみてください。

ちなみに自分の場合、バックエンドは以下の通り記載していました。

terraform {
  required_version = "= 1.0.7"

  required_providers {
    aws = "~> 3.58"

  }

  backend "s3" {
    bucket = "terraform-state-123456789012"
    key    = "terraform.tfstate"
    region = "ap-northeast-1"
    acl    = "bucket-owner-full-control"
    dynamodb_table = "terraform_state_lock"
  }
}

対処法

元々作成していたものと同じ設定と名前でDynamoDBテーブルを再度作成すると、エラーが表示されなくなりました。

余談

-lock=false オプションを付ければ、一時的にエラーは回避できますが、とはいえ上記は半永久的に表示されることになるため、いずれにせよDynamoDBテーブルの再作成が必要です。

ちなみに本来の排他制御によるエラー表示は、以下の通り、Lock ID が表示されます。Lock IDが表示されれば、 terraform force-unlock {LockIDを入力} でロックを解除できます。

% terraform plan
╷
│ Error: Error acquiring the state lock
│
│ Error message: ConditionalCheckFailedException: The
│ conditional request failed
│ Lock Info:
│   ID:        6ae68083-5152-7ee0-f507-xxxxxxxxxxxx
│   Path:      terraform-state-123456789012/terraform.tfstate
(以下省略)

参考情報

Terraform state locking via DynamoDB

Terraform - Terraformにてresource not foundでのstate lockエラーの解決について|teratail

amazon web services - Terraform error "Error locking state: Error acquiring the state lock: 2 errors occurred" - Stack Overflow

v0.9 Terraform s3 backed docs unclear · Issue #12774 · hashicorp/terraform

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.